package com.ztesoft.sca.dao;

import com.ztesoft.sca.model.ImButtonDto;
import com.ztesoft.sca.model.ImMenuDto;
import com.ztesoft.sca.model.ImPageDto;

import java.util.List;
import java.util.Map;

/**
 * 菜单管理接口
 * @author guojd
 */
public interface ImMenuManageDao {
    /**
     * 新增菜单ID
     */
    public Long getNewMenuId();
    /**
     * 新增页面ID
     */
    public Long getNewPageId();
    /**
     * 新增菜单
     * @param imMenuDto 菜单对象
     */
    public void insertMenu(ImMenuDto imMenuDto);

    /**
     * 删除菜单
     * @param menuId 菜单ID
     */
    public void deleteMenu(Long menuId);

    /**
     * 修改菜单
     * @param imMenuDto 菜单对象
     */
    public void updateMenu(ImMenuDto imMenuDto);

    /**
     * 查询菜单
     * @param param 查询参数
     *              menuName/menuId/parentId/menuCode
     * @return 菜单列表
     */
    public List<ImMenuDto> selectMenus(Map<String,Object> param);

    /**
     * 菜单列表树形
     * @param parentId 父级ID，如果为空则查询全部
     * @return 菜单列表
     */
    public List<ImMenuDto> selectMenuTree(Long parentId);

    /**
     * 根据菜单ID查询按钮
     * @param menuId 菜单ID
     * @return 按钮列表
     */
    public List<ImButtonDto> selectButtonsByMenuId(Long menuId);

    /**
     * 菜单按钮关系新增
     * @param menuId 菜单ID
     * @param buttonId 按钮ID
     */
    public void insertButtonMenuRela(Long menuId,Long buttonId);

    /**
     * 删除菜单按钮关系
     * @param menuId 菜单ID
     * @param buttonId 按钮ID
     */
    public void deleteButtonMenuRela(Long menuId,Long buttonId);

    /**
     * 新增页面
     * @param imPageDto 页面对象
     */
    public void insertPage(ImPageDto imPageDto);

    /**
     * 删除页面
     * @param pageId 页面ID
     */
    public void deletePage(Long pageId);

    /**
     * 更新页面
     * @param imPageDto 页面对象
     */
    public void updatePage(ImPageDto imPageDto);

    /**
     * 查询页面列表
     * @param param 参数
     *               pageId/menuId/pageCode/pageName/title/url
     * @return 页面列表
     */
    public List<ImPageDto> selectPages(Map<String,Object> param);
}
